大数据、数仓、数开面试真题总结(一)
来源:大数据那些事
导读:腾讯、阿里、百度、京东大数据/数仓/数开面试题,十多位同学的真实面试总结,面试宝典和导引,先汇总全部题目。建议先收藏下来,慢慢看。
01
PART
腾讯面试题
同学1
(1)有一表名t_sh_mtt_netdisk_log,从表名可以看出该表是什么业务的,是什么周期粒度的表。
(2)怎么查看表结构,表创建语句?怎么查看表有哪些分区?怎么查看分区对应hdfs路径?怎么计算某个分区的数据量大小?怎么计算某个分区的文件总数?
(3)有一hive sql,怎么计算这个sql会产生多少个map数?
(4)怎么查看hive有什么自带函数?怎么查看函数的详细信息?
(5)Hive支持哪些基本数据类型?
(6)请指出下面两个语句读取分区ds数据的不同
Select * from t where ds=20150101 and province='gd' or province='ex'
Select x fromt where ds 20150101 and(province='gd' or province='ex')
(7)将字符串"keyl=valuel&key2=value2...keyn=valuen"进行分割放到一个字段里面,可以查出任意一个keyx对应的valuex值。请写出查询语句,并计算总共有多少个key值。
(8)用一个字符串比如"alblc"来测试某个函数比如split(用|分隔符将字符串进行分割)的语句
(9)a表和b表内连接,a表为小表,只有2000行记录
select a.*from a Join b on a.key=b.key
可以进行怎样的优化
(10)a表left join b表,b表为小表,可以进行怎样优化?
scleet a.*from a left join Join b ona.key=b.key
如果a为小表,可以怎样优化?
(11)请指出下面sql语句的区别
select a.* from a left Join b on a.key = b.key and a.ds=xxx and b.ds=xxx
sclect a.* from a lef Join b on a.key = b.key and b.ds=xxx
select a.* from a lef Join b on a.key = b.key and b.ds=xxx where a.ds=xxx
Select a.* from a left Join b on a.key = b.key where a.ds=xxx and b.ds=xxx
(12)多表连按的写法:a,.b,c三个表内连接,连接字段都是key,怎样写连接语句?
(13)两大表连接,发生了数据倾斜,有几个reduce无法完成,怎么查找发生数据倾斜的原因?应该怎样优化?
语句:
select t1.*,nvl(t2.x,1) from t1 left join t2 on t1.guid=t2.guid
(14)两大表连接,发生了数据倾斜。有一个reduce无法完成,检查发现t1中guid="的记录有很多,其他guid都不重复,这条语句该怎样优化?
语句:
select t1.*,nvl(t2.x,1) from t1 left join t2 on t1.guid = t2.guid
(15)如何用hive q!实现sqL中的exist/in 子句
mysql语句如下:
SEL ECT a* FROM a where a.key in(select dstinct key from b where key like ‘filter%’)
(16)sort by、distribute by、cluster by 和 order by区别
同学2
用HiveSQL实现
(1)全量用户登录日志表t_login_all,字段信息ftime(登录日期)、openid(登录帐号)新增用户登录日志表t_login_new,字段信息ftime(登录日期)、openid(登录帐号)求每天新增用户次日、7天、30天留存率。
(说明:7天留存是指当天有登录且第7天还登录的用户)
(2)消息流水表t_chat all,字段信息:
Ftime(日期)、send_user id(发消息用户id)、receive.user id(接收消息用户id)、chat id(消息id)、send.time(发消息时间)
用户登录流水日志表t_login_all,字段信息:
Ftime(日期)、user_id(用户id)、login_id(登录id)、login_loc(登录区服)、login_time(登录时间)
求:每天有收发消息用户最近登录时间、登录区服,输出ftime,user_id,login_loc,login_time
用Spark core实现,写Scala脚本
1、reduceByKey()、groupByKey()有什么区别?
2、DataFrame和RDD有什么区别?
3、使用累加器,对数组Array(1,2,3,4)每个元素实现累加操作,最后打印输出求和结果。
4、现有文件file.txt,文件格式如下
Order_id,user_id,payment,productid
1、1768,50,155
2、1218,600,211
3、2239,788,242
4、3101,288,599
5、4899,25,230
6、2311,890,981
。。。。。。
求Top10个payment字段的值
同学3
1)技术部分
(1)我看你上面写了你会Spark,那你用Spark写一下刚刚那道题的代码(第6题),不能用Spark SQL
(2)我看你上面有写到熟悉Hive原理和优化,你说一下怎么优化
(3)优化有说到语句优化,然后又说回到pv和uv那个问题,假如说让你优化你怎么优化(我代码里面有count(distinct id) uv,)
(4)问了一些Kafka的,我只记得一点点,问我数据会不会重复消费,什么情况下会重复消费
(5)在Hive执行语句的时候如果很慢,什么原因造成
我有提到数据倾斜的问题,他又问怎么解决数据倾斜
2)项目部分
(1)让你挑一个比较有亮点的项目详细说
(2)你负责了什么,数仓中统计了哪些指标,
(3)刚刚听你说项目里面有提到分层,如果我要你求每天商品的pv,uv,从ods层到dm层它的具体流向,各层都统计了什么(后来让写求pv,uv的sql语句)
3)场景部分
(1)有一个分区表,表名T,字段qq,age,按天分区,让写出创建表的语句
(2)刚刚的分区表,求20200221这个分区中,年龄第N大的qq号列表
(3)有一个表,两个字段,分别是qqa和qqb,数据如下:
12,34
12,56
12,78
34,56
34,12
找出所有互相关注的qq对
4)手写部分
(1)三个字段,timestamp,user_id,product_id,让求pv最大的商品,写了之后又叫用Scala代码写一遍,然后又问,假如说只让你求pv数大于100的top3呢,代码又怎么写
同学4
1)技术部分
(1)你们数仓用什么建模方法,说出常见的建模方法?
(2)维度建模有什么好处?为什么选择这个?比如最后业务需求要增加一个维度,我们需要做什么工作?
(3)怎么判断一个需求能不能实现,你们的判断标准是什么?需求变更要做什么
(4)增加一个维度后发现查询的速度变得非常慢,是什么原因导致的?
(5)你们ADS层的数据量每天的数据量有多大?ADS层再到MySQL中的表是怎么创建的?有什么注意事项?索引怎么创建的?
(6)你知道Spark的宽窄依赖吗?有没有把宽依赖转化为窄依赖的例子?
(7)Spark参数调优做了些什么 ?
2)算法部分
(1)一个list [1,5,5,7,9] 去重,并计算时间空间复杂度
(2)单链表的反转
02
PART
阿里云面试题
学长1
1)技术部分
(1)Spark提交job流程
(2)提交脚本中-jar什么意思
(3)Excutor怎么获取Task
(4)详解Hadoop的WordCount
(5)Spark做过哪些优化,(优化说完会问你为什么?原理是什么?)
(6)Spark内存管理
2)算法部分
(1)单向链表反转
(2)实现堆栈push Pop Min 复杂度0(1)
(3)实现一个队列,男女均衡最长的队列 复杂度0(N)
学长2
阿里三面
第一题,亿级的交易订单量,每笔都有金额,快速找出top1000,要求不是简单的排序然后求出top1000,代码要有健壮性;提示注意是top1000不是top10。Map和Reduce分别做Treemap
第二题:有两个约1000万行记录的4到5G文件,JVM只有32M,在内存不溢出的情况下,找出相似的条数并打印出来。布隆过滤器
第三题,有一个双十一的天猫场景,我要做实时和离线两种分析方向,从数据建模、计算性能、元数据管理、数据质量上讲一讲基本架构设计成什么样子。
阿里四面
第一题,岛上有100个囚犯,他们都是蓝眼睛,但是他们都只能看到别人眼睛的颜色,并不能知道自己的眼睛颜色,而且他们之间不能去谈论眼睛颜色的话题,规定每天晚上都可以有一个人去找守卫说出自己的眼睛颜色,如果错了被杀死,如果对了被释放。但是大家在没有十足的把握前都不敢去找守卫,有一天,一个医生对他们说你们之中至少有一个蓝眼睛,然后N天,这些人都获救了,为什么?这句话对他们有什么影响?
03
PART
百度面试题
学长1
1)笔试部分
(1)你可以得到网站访问记录,每条记录有user IP,设计一个程序,要随时能计算出过去5分钟内访问次数最多的1000个IP
(2)简述Paxos协议
(3)编程简单实现一个阻塞队列
(4)简单实现一个LRU算法
(5)有一个5000万的用户文件(user_id,name,age),一个2亿记录的用户看电影的记录文件(user_id,url),根据年龄段观看电影的次数进行排序?
2)技术部分
(1)Java的NIO是否了解
(2)Java多线程(什么wait、notify)
(3)MapReduce的shuffle过程(手画,边画边介绍),reduce是怎么到map端获取数据的(RPC通信是否了解)
(4)一句话介绍MapReduce
(5) Spark做缓存时缓存在哪里
(6)是否看过Hadoop源码
(7)Linux系统(常用命令啥的)
(8)除了这些平时还接触或者学习哪些技术
3)项目部分
(1)业务架构
(2)根据项目业务介绍技术
(3)MapReduce数据倾斜和内存溢出怎么办
4)算法部分
(1)手写归并排序
(2)用递归实现斐波那契数列第100项的值(第一项和第二项分别为0和1),手写
(3)算法和数据结构了解到什么程度、知道多少
(4)Java中的数据结构,ArrayList和LinkedList的区别,ArrayList为什么查询快(为什么用数组就快)、LinkedList为什么增删快,哪些Map是线程安全的
5)手写代码部分
(1)手写MapReduce的WordCount(导入的包最好能记住)
6)场景部分
(1)遇到垃圾日志怎么办(假如说有人恶意制造日志,怎么处理。我说的黑名单机制,那个面试官貌似还挺满意)
学长2
1)基本信息介绍
(1)11月17号度小满金融(原百度金融,A轮公司)
(2)面试地点:西北旺百度科技园旁
(3)面试时长:2个半小时
(4)面试次数:3次
2)一面:
(1)一面中规中矩,有手写SQL环节,还有SparkStreaming常用算子解决实际问题。大概1个多小时。
(2)手写SQL考的是:
三个字段:area、year、temperature,统计每个地区的温度最高的对应的年份。
写的用rank函数,一个子查询,险过。
3)二面:
因为面的是架构师,所以二面问的是几个组件的版本号和几个大数据组件的安装过程和配置文件细节,还有HA的几个进程的作用,比较难。大概20分钟
4)三面:
问了自定义UDAF,UDTF,和数仓开放性问题,和三面主管说了毕业时间,并说了未签订劳务合同,他说怎么没签合同呢,太后悔了,最后走的时候说hr可能过不去,给我争取一下。大概30分钟。
学长3
1)笔试
(1)写出用户表 tb_cuid_1d的 20200401 的次日、次7日留存的具体HQL :一条sql统计出以下指标 (4.1号uv,4.1号在4.2号的留存uv,4.1号在4.8号的留存uv)(一条sql写完)
(2)统计当天不同平台、版本下的uv、pv
(3)解析ext中所有的"type"( lateral view explode)
2)二面:
t_a (uid,os,day),t_b(uid,os,day),15号在t_a,但是不在t_b的用户
ut格式: 机型_app版本_xxx_xxx_厂商, 如 iphone 6s_10.0.0.1_sdk12.1_baidu_iphone:解析 ;12.1
t_a (uid,os,day)
最近30内,所有用户末次活跃日期
最近30内,所有用户末次活跃日期和倒数第二次的差值
学长4
讲项目
kafka精确一次性
数据量
log日志类型,存的什么数据
spark streaming怎么做的实时
hbase rowkey你是怎么设计的
namenode 重启流程
hdfs读流程
flume拦截器怎么写的
flume结构
两道算法:
窗口求中位数, 流式处理底层求热点问题常用到
一个树形结构,一个节点可以监听它的父节点和子节点,问最小监听数量
04
PART
京东面试题
学长1
1)笔试部分
(1)列举几种数据倾斜的情况,并解释为什么会倾斜,以及如何解决?
(2)解释一下SQL运行步骤,是否有优化空间,如果有,如何优化:
SELECT a.id, b.name FROM a LEFT OUTER JOIN b ON a.id = b.id WHERE a.dt = ‘2016-01-01’ AND b.dt = ‘2016-01-01’;
(3)已知表a是一张内部表,如何将它转换成外部表?请写出相应的Hive语句
(4)用select做查询,用哪个函数给值给null的数据设置默认值?
(5)Hive中,建的表为压缩表,但是输入文件为非压缩格式,会产生怎样的现象或者结果?
(6)订单详情表ord_det(order_id订单号,sku_id商品编号,sale_qtty销售数量,dt日期分区)任务计算2016年1月1日商品销量的Top100,并按销量降级排序
(7)某日志的格式如下:
pin|-|request_tm|-url|-|sku_id|-|amount
分隔符为‘|-|’,
数据样例为:
张三|-|q2013-11-23 11:59:30|-|www.jd.com|-|100023|-|110.15
假设本地数据文件为sample.txt,先将其导入到hive的test库的表t_sample中,并计算每个用户的总消费金额,写出详细过程包括表结构
(8)test.log日志中内容如下左列所示,使用awk输出右列4行数据
10-3-jd-dv
2-4-jd-dv10-4-jd-dv
5-7-pv-click5-7-pv-click
36-24-pv-uv
37-24-pv-uv37-24-pv-uv
24-3-uv-mq24-3-uv-mq
(9)Storm的分组策略有哪些?
学长2
1)笔试部分
(1)HiveSQL语句中select from where group by having order by的执行顺序
(2)Hive中MapJoin的原理和实际应用
(3)写出你常用的HDFS命令
(4)使用Linux命令查询file1里面空行的所在行号
(5)有文件chengji.txt内容如下:
张三 40
李四 50
王五 60
请使用Linux命令计算第二列的和并输出
(6)在Linux环境下有文件/home/dim_city.txt如何加载dim_city外部表中,HDFS路径/user/dim/dim_city
(7)请列出正常工作的hadoop集群中hadoop都分别需要启动哪些进程,他们的作用分别是什么,尽可能写的全面些
(8)数据仓库的整体架构是什么,其中最重要的是哪个环节
学长3
1)笔试部分(京东金融)
(1)数据按照业务含义可以分为时点数和时期数,在一般情况下,下列哪些数据属于时点数?
A.昨天的订单量B.昨天的库存量
C.昨天的点击量D.昨天的访问次数
(2)About hadoop map/reduce,The right answer is?
A.reduce的数量必须大于零
B.reduce总是在所有map完成之后再执行
C.combiner过程实际也是reduce 过程
D.Mapper的数量由输入的文件个数决定
(3)Hive中的元数据不包括?
A.表的名字B.表的外键
C.表的列D.分区及其属性
(4)Hive中如何限制查询条数?
A、TOP B、limitC、rownumD、only
(5)关于hivesql以下说法正确的是:
A.cluster by不会对字段进行排序
B order by只保证每个reducer的输出有序,不保证全局有序
C sortby是全局有序
D distribute by制定规则字段,将相同组数据分发到同一reducer
(6)下面SQL的运行结果是什么?
Select a.id,b.name from (select id from table_id) a left semi join (select id, name from table_nm) b on a.id=b.id
table_id |
id |
1 |
2 |
table_id | |
id | name |
1 | wzb |
A 、(a,ok)B、(2,null)C、(1,ok & & 2,null)D、以上结果均不对
(7)你处理过的最大数据量是多少?处理时是否遇到问题,采取了哪些优化的方案?
(8)列举Hive几种数据倾斜的场景以及解决方案?
学长4
1)技术部分
(1)你们Spark哪个版本
(2)SparkStreaming如何和Kafka对接
(3)Kafka消费过的消息如何再消费
(4)Redis版本多少
(5)CDH版本多少
(6)集群怎么部署的
(7)数据倾斜怎么处理
(8)MR和Spark的Shuffle的区别
(9)MR环形数组怎么设置最大能设置多大
(10)Redis分布式锁怎么实现
(11)Rdd和dateset的区别
(12)说说Scala伴生对象
(13)解释Scala的模式匹配
(14)谈谈Scala隐式转换
(15)Yarn的组件说说他们的功能
(16)Spark一个Excutor给多大内存
(17)Spark几种部署模式还有他们的区别
(18)你运行程序是client还是cluster 为什么
(19)说出git的几个常用命名
(20)git如何切换分支
(21)对Hive的理解做过哪些优化
4)算法部分
(1)用Idea写快速排序
5)手写代码部分
(1)手写Spark WordCount
6)项目部分
(1)整个业务数据的流向
7)场景部分
(1)现有两张大表所有字段都得保留不能再过滤了join操作就发生OOM怎么解决
(2)Session日志分析如何求出用户访问的Page路径
(3)三表的join求销量,order——id的统计(记得不了)就是三表join求统计吧
学长5
1)京东数科二面
(1)最近一两年内你做过感觉最有趣或者让你记忆深刻的项目,挑一个说一说。我说的是SparkStreaming实时计算(李老师讲的在线教育那个项目,我给稍微改了改成电商项目了)。
(2)有关于Spark、Kafka、MySQL的项目你感觉那个比较熟练一点。我回答我的是对spark比较感兴趣。
(3)做这个项目用的是Spark的哪个版本?
(4)这个版本里用Kafka用的是那种消费方式。
(5)可以简单讲一下direct大概的一个设计套路。
(6)如果说我每隔一百条或者一千条,记录偏移量,如果跑到八百条宕掉了,有可能重复消费,针对receiver优势能不能解决这一点?
(7)如果dsteam方式去拉取Reduce拉取出去,那有多少个线程从Kafka里拖数据?
(8)平时除了用Spark比较多,用Hive也不少,平时会涉及到调参优化方面有哪些?
(9)你能介绍一下Flume的架构或者设计。
(10)用代码实现一个类似于Flink水位线的机制。
(11)有做过依赖调解的工作吗?比如说有没有碰到问题说引用自己一个依赖,但是在别的地方用了一个其他的依赖由于版本不统一,不能兼容该怎么办
(12)最近为什么会想到说换一个工作。(离职原因)
(13)你有什么想问我们的。
完
看完本文有收获?请转发分享给更多人
如果你也是大数据、数据仓库、数据分析、数据科学、人工智能爱好者,回复下面任意关键词,都可领取学习资料,还可以加讨论群交流。
文章不错?点个【在看】吧! 👇